/**
 * let
 *
 * 1.不可以重复声明
 * 2.暂时性死区-没有变量提升
 * 3.存在块级作用域
 */
// // 1不可以重复声明
// let a = 'A'
// let a = 'F'
// console.log(a) //Identifier 'a' has already been declared 标识符重复声明
// // 2没有变量提升
// console.log(b) //暂时性死区 Cannot access 'b' before initialization 初始化前无法访问 ''
// let b = 'B'
// // 3存在块级作用域
// {
//     let c = 'C'
//     console.log(c) // 'C'
// }
// console.log(c) // c is not defined 变量c没有声明
/**
 * const 常量
 *
 * 1.必须再声明时赋予初始值
 * 2.常量值不能修改
 * 3.存在块级作用域
 * 4.#一般使用大写
 * 5.对数组或对象的元素修改，不算对常量的修改，不会报错
 */
// //  1.必须再声明时赋予初始值
// const a;
// console.log(a) //Missing initializer in const declaration 常量声明中缺少初始值设定项
// // 2.常量值不能修改
// const b = 'B'
// b = 'BB'
// console.log(b) //Assignment to constant variable. 赋值给常数变量。
// // 3.存在块级作用域
// {
//     const c = 'C'
//     console.log(c) // C
// }
// console.log(c) // c is not defined 变量c没有声明
// // 5.对数组或对象的元素修改，不算对常量的修改，不会报错
// const d = ['a','b','c'];
// d.push('d')
// console.log(d) // ['a','b','c','d']
// d = 'f'
// console.log(d) //Assignment to constant variable. 赋值给常数变量。
/**

var 变量提升，可重复声明，可修改。声明时可不赋值

let 可修改，暂时性死区，声明时候可不赋值

const 声明时必须赋值，不可修改（除修改数组、对象中的元素），暂时性死区域

 */ 
